# 创建一辆车，设计车的行为和属性，输出车的信息、调用行为


# 设计模板：类
# 属性：品牌、名称、价格、时速...
# 行为: 形势、放电、水面驾驶、飞行、娱乐...
# 类名命名注意：每个单词首字母大写
class Car:
    # 定义一些变量描述车的属性
    # 写在这里的属性称为全局属性
    # brand = '小米'
    # name = 'YU7'
    # price = '29万'
    type = "纯电"

    # __init__称为初始化函数、构造函数。是一个特殊函数
    # 1.会在创建对象的时候自动调用
    # 2.可以限制创建对象时所需的参数
    # 3.这些参数通常用于初始化类和对象的属性
    def __init__(self, pinpai, mingcheng, jiage):
        # self.属性 表示这个对象的某个属性
        self.brand = pinpai
        self.name = mingcheng
        self.price = jiage
        print("__init__函数")

    # 定义一些函数描述车的行为
    # 在类中定义函数，至少需要一个self的参数，表示这个类自身的一个对象
    # 可以通过self访问当前类中定义的属性和函数
    def drive(self):
        print(f"{self.type}{self.name}正在行驶。。。")

    def fun(self):
        print(f"价值{self.price}元的{self.brand}{self.name}正在播放音乐")


# 创建对象
# 对象 = 类名()
# 如果__init__函数有参数，创建对象时，必须按参数要求传参
xiaomi = Car("小米", "SU7", "22.59万")
byd = Car("比亚迪", "秦PLUS", "7.98万")
xiaomi.drive()
byd.drive()


# xiaomi.drive()
# xiaomi.fun()

# 创建人类
# 属性:姓名、年龄、性别、婚姻状况
# 行为：自我介绍
class Person:
    def __init__(self, name, age, sex, is_married=False, car=None):
        self.name = name
        self.age = age
        self.sex = sex
        self.is_married = is_married
        self.car = "无车" if car is None else car.name

    def introduce(self):
        print(
            f"我叫{self.name}，"
            f"今年{self.age}岁，"
            f"是一个{self.sex}生，"
            f"是否有车：{self.car}，"
            f"婚姻状况：{"已婚" if self.is_married else '未婚'}"
        )


# 创建两个人类对象
# 一个男一个女
# 各自调用自我介绍的函数
xiaomi = Car("小米", "SU7", "22.59万")
p1 = Person("王海", 22, "男", car=xiaomi)
p2 = Person(age=20, name="李梅", sex="女", is_married=True)

p1.introduce()
p2.introduce()


# 设计一个可以判断两个人能否结婚的类
#
class Department:
    # 这个部门无关属性，可以省略构造函数
    def can_marry(self, p1, p2):
        # 结婚条件：
        # 都未婚
        if p1.is_married or p2.is_married:
            print("双人都必须未婚")
            return False
        # 性别不同
        if p1.sex == p2.sex:
            print("性别必须不同")
            return False
        # 男年龄>22 女年龄>20
        if p1.sex == "男" and p1.age >= 22 and p2.sex == "女" and p2.age >= 20:
            return True
        elif p2.sex == "男" and p2.age >= 22 and p1.sex == "女" and p1.age >= 20:
            return True
        else:
            print("一方年龄不够法定结婚年龄")
            return False


p1 = Person("王海", 22, "男", car=xiaomi)
p2 = Person(age=20, name="李梅", sex="女")
p1.introduce()
p2.introduce()
mzj = Department()
print(mzj.can_marry(p1, p2))
